Configuratiebestand toevoegen aan de PostcodeApp
De naam van de provider
Data/Postcode
was toe nu toe hard gecodeerd in de PostcodeApp. Als we van naam willen veranderen moeten we overal in de code de naam gaan aanpassen. Het is een goed idee om zo'n gegevens in een configuratie bestand op de slaan. .NET Core beschikt over een pakket waarmee je dat kan doen: De .NET Core configuratie API.Daarnaast gaan we DI gebruiken om de configuratie te injecteren in onze PostcodeApp. De app is immers afhankelijk van de configuratie en we willen ervoor zorgen dat we op een gemakkelijke manier, indien nodig, een andere configuratie voor onze app kunnen gebruiken.
Stappenplan
- Om de configuratie api te kunnen gebruiken moet je het
Microsoft Extensions.Configuration
NuGet-pakket toevoegen aan je applicatie. In de NuGet Package Manager Console typ je (kies de versie voor .NET Core 2.0)Module Vincent: We gebruiken andere versies voor .NET Core 3.0.:PM> Install-Package Microsoft.Extensions.Configuration -Version 2.0.0
Vincent: Maak daarvan versie 3.0.0 - We hebben nog de volgende pakketten nodig:
PM> Install-Package Microsoft.Extensions.Configuration.Json -Version 2.0.0 PM> Install-Package Microsoft.Extensions.Configuration.FileExtensions -Version 2.0.0 PM> Install-Package Microsoft.Extensions.Options.ConfigurationExtensions -Version 2.0.0
Vincent: telkens 3.0.0. - Voeg in de root van je project een bestand toe met de naam
appsettings.json
:{ "Configuration": { "ConnectionString": "Data/Postcode" } }
We voorzien de nodige eigenschappen om later in de module een SQL connectiestring te kunnen toevoegen. - Maak een bestand met de naam AppSettings.cs met daarin een klasse met de naam
AppSettings
en de volgende eigenschappen:namespace PostcodeApp { public class AppSettings { public string ConnectionString { get; set; } } }
- Update de
Program.ConfigureServices
methode in deProgram
klasse:private static void ConfigureServices(IServiceCollection serviceCollection) { // build configuration var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", false) .Build(); serviceCollection.AddOptions(); serviceCollection.Configure<AppSettings>(configuration.GetSection("Configuration")); // add services serviceCollection.AddSingleton<Dal.IPostcode>(p => new Dal.PostcodeJson(new Bll.Postcode())); // add app serviceCollection.AddTransient<App>(); }
We gebruiken eenConfigurationBuilder
object om:- een absoluut pad in te stellen naar waar het appsettings.json bestaat staat;
- het appsettings.json bestand toe te voegen aan het IConfigurationRoot object;/li>
- een IConfigurationRoot-object te maken en te retourneren
IConfigurationRoot
instantie en binden het aanOptions
. - Om de configuratie te gebruiken wijzigen we de
App
klasse in het App.cs bestand. We injecteren eenIOptions<T>
van het typeAppSettings
. Dit betekent dat we een object krijgen dat ons appsettings.json config bestand heeft deserialized in dat object. En we gebruiken de ConnectionString eigenschap van dat object om de naam op de geven van het storage bestand:using Microsoft.Extensions.Options; using System; namespace PostcodeApp { public class App { private readonly Dal.IPostcode postcodeDal; private readonly AppSettings appSettings; public App(Dal.IPostcode postcodeDal, IOptions<AppSettings> appSettings) { this.postcodeDal = postcodeDal; this.appSettings = appSettings.Value; } public void Run() { Console.WriteLine("De Postcode App Generic"); // set the datasource from appsettings.json postcodeDal.ConnectionString = appSettings.ConnectionString; postcodeDal.ReadAll(); Console.WriteLine(postcodeDal.Message); View.PostcodeConsole view = new View.PostcodeConsole(postcodeDal.Postcode); view.List(); // serialize to another file postcodeDal.ConnectionString = $"{appSettings.ConnectionString}3"; postcodeDal.Create(); Console.WriteLine(postcodeDal.Message); } } }
2017-10-17 12:31:07